package com.cskaoyan.javase.oop2._1extends._6protected._3test;

import com.cskaoyan.javase.oop2._1extends._6protected._2three.A;

/**
 * 测试类A的子类
 *
 * @since 10:05
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class TestASon extends A {
    public static void main(String[] args) {
        A a = new A();
        // a._3test();
        // 只能"自己用自己的",静态方法没有任何对象,所以必须new自身对象后再访问
        TestASon ts = new TestASon();
        ts.test();
        System.out.println("-------------------");
        new TestASon().method();
    }

    public void method() {
        // 这里能不能直接调用父类受保护的test方法?
        // 可以,因为成员方法中隐式传参this指向当前自身对象,已经有自身对象,可以直接调用test方法
        System.out.println("我今天心情不好,所以我不想学习~");
        test();
        System.out.println("我今天心情不错,所以我不想学习~");
    }

    /*
        扩展:
        方法的重写/覆盖(override)
        除了可以修改父类方法的实现,也可以修改从父类继承过来的方法的访问权限

        比如以下,虽然访问权限修饰符仍然是protected
        但由于所处包,所处位置不同,访问权限实际上也发生了变化
     */
    @Override
    protected void test() {
        System.out.println("son _3test");
    }
}
class B{
    public void method(){
        new TestASon().test();
    }
}